package com.itheima.web.base;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1.获得需要执行的方法字符串(浏览器传入的)  反射需要每个人都会(必须会-框架底层全是反射)
            String action = request.getParameter("action");

            //2.获得当前类的class对象
            Class clazz = this.getClass();

            //3.根据action获得方法对象  getDeclaredMethod() 获得所有的方法中的某一个
            //可变长参数 需要声明 方法的参数类型
            Method method = clazz.getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);

            //4.私有的方法 需要暴力反射
            method.setAccessible(true);

            // this.save(request, response);//调用方法
            //5.执行方法 参数1:调用的哪个对象的方法  参数2: 真实传递的参数
            method.invoke( this ,request , response );

            //对象 变量 = new 对象()   变量.方法()


        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}
